The Calendar view will display each child note in a calendar that has a start date and optionally an end date, as an event.

The Calendar view has multiple display modes:

Unlike other Collection view types, the Calendar view also allows some kind of interaction, such as moving events around as well as creating new ones.

Creating a calendar

Right click on an existing note in the Note Tree and select Insert child note and look for Calendar.

Creating a new event/note

Interacting with events

Interaction on mobile

When Trilium is on mobile, the interaction with the calendar is slightly different:

Configuring the calendar view

In the Collections tab in the Ribbon, it's possible to adjust the following:

Configuring the calendar using attributes

The following attributes can be added to the Collection type:

Name Description
#calendar:hideWeekends When present (regardless of value), it will hide Saturday and Sundays from the calendar.
#calendar:weekNumbers When present (regardless of value), it will show the number of the week on the calendar.
#calendar:initialDate Change the date the calendar opens on. When not present, the calendar opens on the current date.
#calendar:view

Which view to display in the calendar:

  • timeGridWeek for the week view;
  • dayGridMonth for the month view;
  • multiMonthYear for the year view;
  • listMonth for the list view.

Any other value will be dismissed and the default view (month) will be used instead.

The value of this label is automatically updated when changing the view using the UI buttons.

~child:template Defines the template for newly created notes in the calendar (via dragging or clicking).

In addition, the first day of the week can be either Sunday or Monday and can be adjusted from the application settings.

Configuring the calendar events using attributes

For each note of the calendar, the following attributes can be used:

Name Description
#startDate The date the event starts, which will display it in the calendar. The format is YYYY-MM-DD (year, month and day separated by a minus sign).
#endDate Similar to startDate, mentions the end date if the event spans across multiple days. The date is inclusive, so the end day is also considered. The attribute can be missing for single-day events.
#startTime The time the event starts at. If this value is missing, then the event is considered a full-day event. The format is HH:MM (hours in 24-hour format and minutes).
#endTime Similar to startTime, it mentions the time at which the event ends (in relation with endDate if present, or startDate).
#recurrence This is an optional CalDAV RRULE string that if present, determines whether a task should repeat or not. Note that it does not include the DTSTART attribute, which is derived from the #startDate and #startTimedirectly. For examples of valid RRULE strings see https://icalendar.org/rrule-tool.html
#color Displays the event with a specified color (named such as red, grayor hex such as #FF0000). This will also change the color of the note in other places such as the note tree.
#calendar:color ❌️ Removed since v0.100.0. Use **#color** instead.  

Similar to #color, but applies the color only for the event in the calendar and not for other places such as the note tree.
#iconClass If present, the icon of the note will be displayed to the left of the event title.
#calendar:title Changes the title of an event to point to an attribute of the note other than the title, can either a label or a relation (without the # or ~symbol). See Use-cases for more information.
#calendar:displayedAttributes Allows displaying the value of one or more attributes in the calendar like this:       

     

#weight="70" #Mood="Good" #calendar:displayedAttributes="weight,Mood"     

It can also be used with relations, case in which it will display the title of the target note:      

~assignee=@My assignee #calendar:displayedAttributes="assignee"
#calendar:startDate Allows using a different label to represent the start date, other than startDate(e.g. expiryDate). The label name must not be prefixed with #. If the label is not defined for a note, the default will be used instead.
#calendar:endDate Similar to #calendar:startDate, allows changing the attribute which is being used to read the end date.
#calendar:startTime Similar to #calendar:startDate, allows changing the attribute which is being used to read the start time.
#calendar:endTime Similar to #calendar:startDate, allows changing the attribute which is being used to read the end time.

How the calendar works

The calendar displays all the child notes of the Collection that have a #startDate. An #endDate can optionally be added.

If editing the start date and end date from the note itself is desirable, the following attributes can be added to the Collection note:

#viewType=calendar #label:startDate(inheritable)="promoted,alias=Start Date,single,date"
#label:endDate(inheritable)="promoted,alias=End Date,single,date"
#hidePromotedAttributes 

This will result in:

When not used in a Journal, the calendar is recursive. That is, it will look for events not just in its child notes but also in the children of these child notes.

Recurrence

The built in calendar view also supports repeating tasks. If a child note of the calendar has a #recurrence label with a valid recurrence, that event will repeat on the calendar according to the recurrence string. 

For example, to make a note repeat on the calendar:

For other examples of valid RRULE strings see https://icalendar.org/rrule-tool.html

Note that the recurrence string does not include the DTSTART attribute as defined in the iCAL specifications. This is derived directly from the startDateand startTime attributes

If you want to override the label the calendar uses to fetch the recurrence string, you can use the #calendar:recurrence attribute. For example, you can set #calendar:recurrence=taskRepeats. Then you can set your recurrence string like #taskRepeats="FREQ=DAILY;INTERVAL=1"

Also note that the recurrence label can be made promoted as with the start and end dates. 

Use-cases

Using with the Journal / calendar

It is possible to integrate the calendar view into the Journal with day notes. In order to do so change the note type of the Journal note (calendar root) to Collection and then select the Calendar View.

Based on the #calendarRoot (or #workspaceCalendarRoot) attribute, the calendar will know that it's in a calendar and apply the following:

Using a different attribute as event title

By default, events are displayed on the calendar by their note title. However, it is possible to configure a different attribute to be displayed instead.

To do so, assign #calendar:title to the child note (not the calendar/Collection note), with the value being namewhere name can be any label (make not to add the # prefix). The attribute can also come through inheritance such as a template attribute. If the note does not have the requested label, the title of the note will be used instead.

   
#startDate=2025-02-11 #endDate=2025-02-13 #name="My vacation" #calendar:title="name"

 

Using a relation attribute as event title

Similarly to using an attribute, use #calendar:title and set it to name where name is the name of the relation to use.

Moreover, if there are more relations of the same name, they will be displayed as multiple events coming from the same note.

   
#startDate=2025-02-14 #endDate=2025-02-15 ~for=@John Smith ~for=@Jane Doe #calendar:title="for"

Note that it's even possible to have a #calendar:title on the target note (e.g. “John Smith”) which will try to render an attribute of it. Note that it's not possible to use a relation here as well for safety reasons (an accidental recursion  of attributes could cause the application to loop infinitely).

   
#calendar:title="shortName" #shortName="John S."